package com.monster.valid.annotation;

import com.monster.valid.regex.RegexEnum;
import com.monster.valid.validated.MonsterValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * 字符串校验
 * @author kuangxz
 */
@Target({ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {MonsterValidator.class})
public @interface ValidMonster {
    String name() default "";
    /**
     * 提示信息
     * @return 默认提示信息
     */
    String message() default "";

    /**
     * 校验分组
     * @return 分组的class数组
     */
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};




    /**
     * 是否可以为空
     * @return true/false
     */
    boolean isNull() default true;

    /**
     * 正则校验
     * @return 预先定义好的正则
     */
    RegexEnum[] value() default {};

    /**
     * 可以出现的特殊字符
     * @return 特殊字符数组
     */
    String [] specials () default {};

    /**
     * 自定义正则
     * @return 正则字符串
     */
    String [] regex() default {};

    /**
     * 类型为数字时：最小值
     * 类似为字符串：长度
     * @return 最小值或者最小长度
     */
    long min() default Long.MIN_VALUE;
    /**
     * 类型为数字时：最大值
     * 类似为字符串：长度
     * @return 最大值或者最大长度
     */
    long max() default Long.MAX_VALUE;

    /**
     * 如果是字符串的情况下，变为数字比较大小而不是长度
     * @return true/false
     */
    boolean toNumber() default false;
}
